package com.chris.design.pattern.samples.singleton;


/**
 * 这个模式综合使用了Java的类级内部类和多线程缺省同步锁的知识，很巧妙地同时实现了延迟加载和线程安全
 */
public class LazyInitHolderClazzSingleton {
    private LazyInitHolderClazzSingleton() {
    }


    public static LazyInitHolderClazzSingleton getInstance() {
        return SingletonHolder.instance;
    }

    public void doSomething(String name) {
        System.out.println(LazyInitHolderClazzSingleton.class.getSimpleName() + " dosomething, name==" + name);
    }


    /**
     * 私有静态类级内部类（而非对象级内部类）
     */
    private static class SingletonHolder {
        /**
         * 静态初始化器，由JVM来保证线程安全，只会在类装载并被初始化的时候，只初始化一次它的static成员
         */
        private static LazyInitHolderClazzSingleton instance = new LazyInitHolderClazzSingleton();
    }
}
